package cn.itsource.ymcc.util;

import cn.itsource.ymcc.util.jwt.JwtUtils;
import cn.itsource.ymcc.util.jwt.Payload;
import cn.itsource.ymcc.util.jwt.PayloadData;
import cn.itsource.ymcc.util.jwt.RsaUtils;
import com.alibaba.fastjson.JSONObject;
import org.springframework.util.FileCopyUtils;

import java.io.IOException;
import java.security.PublicKey;

/**
 * 用户上下文   这个内就是用来获取当前登录用户
 */
public class UserContext {
    
    //jwt token在请求头中的名称
    public static final String JWT_TOKEN_NAME = "Token";

    /**
     * 获取当前登录用户
     *  一般在后端完成其他业务的时候，需要当前登录用户的id
     * @param jwtToken
     * @return
     */
    public static JSONObject getUser(String jwtToken){
        try {
            //利用JWT工具类解析token   私钥加密 公钥解密
            PublicKey publicKey = RsaUtils
                    .getPublicKey(FileCopyUtils
                            .copyToByteArray(UserContext.class.getClassLoader().getResourceAsStream("hrm_auth_rsa.pub")));
            Payload<PayloadData> payload = JwtUtils.getInfoFromToken(jwtToken, publicKey, PayloadData.class);
            if(payload != null && payload.getUserInfo() != null ){
                return (JSONObject) payload.getUserInfo().getLogin();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取当前登录用户id
     * @param jwtToken
     * @return
     */
    public static Long getUserId(String jwtToken){
        try {
            JSONObject jsonObject = getUser(jwtToken);
            return jsonObject.getLong("id");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        String token = "";
        System.out.println(getUser(token));
        System.out.println(getUserId(token));
    }

}